Sequenceを使い、サーバーがユーザーに代わってトランザクションを送信できるリレートランザクションサーバーの構築方法を説明します。
msg.sender
がSequence Relayersウォレットアドレスのいずれかになる点です。Sequence Builder標準コントラクトでは、リレートランザクションAPIリクエストと組み合わせれば問題ありません。
Expressサーバーによる環境構築
pnpm
(または他のNodeパッケージマネージャ)がインストールされていることを確認してください。/mint
というルートが含まれており、CLIからテスト用に呼び出すことができます。以下の例のcurlリクエストで試してみてください。プロジェクトとアクセスキーの管理
Developer
にアップグレードする必要があります。最後に、Transactions APIには Public Access Key
が必要です。こちらの手順に従って取得してください。最後に、.env.example
を .env
にリネームしてから、以下の内容で更新してください。コレクティブルコントラクトのデプロイ
.env
を更新してください。v1
から v2
への移行、または将来のバージョンへの移行が含まれます。マイグレーションは一方向のみであり、一度ウォレットが移行されると以前のバージョンには戻せません。予期しないマイグレーションを検知するには、onMigration
コールバックを利用できます。callContract
関数を実装するには、以下のように単一の署名者でトランザクションをリレーするコードを追加してください。.env
に設定してください(これはデモ用です)。本番環境では、ご自身のPC上で安全にプライベートキーを生成することを推奨します。次に、取得したキーをPKEY
変数に設定してください。minter permission
を Sequence Wallet Transactions API Address
に付与してください。プロジェクトを開き、Contracts
ページに移動し、Linked contracts
を選択、Write Contract
タブで grantRole
メソッドを展開します。以下の情報で入力してください。bytes32 role
: 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6
address account
: <Generated Sequence Transactions API Wallet Address>
role
文字列は、solidityでは keccak256("MINTER_ROLE")
、javascriptでは ethers.solidityPackedKeccak256(ethers.toUtf8Bytes("MINTER_ROLE"))
の結果です。これにより、特定のアドレスのみがコントラクトからミントできるようになり、それ以外はエラーとなります。write
をクリックし、スポンサー付きトランザクションに署名してロールの更新を完了してください。これで、クライアントフロントエンドでウォレットにサインインし、「ミント」をクリックしてテストトランザクションを送信できます。お試しください。initWallet
関数でアクセスキーを更新することも忘れないでください。